package com.warm.orm.mybatis.sys.agent;

import com.warm.datascope.annotaion.DataScope;
import com.warm.orm.mybatis.sys.mapper.SysDeptMapper;
import com.warm.system.api.orm.agent.SysDeptAgent;
import com.warm.select.api.orm.domain.sys.SysDept;
import org.apache.ibatis.solon.annotation.Db;
import org.noear.solon.annotation.Component;

import java.util.List;

/**
 * 部门管理 数据层 orm代理类
 *
 * @author warm
 */
@Component
public class SysDeptAgentImpl implements SysDeptAgent {

    @Db
    private SysDeptMapper deptMapper;

    /**
     * 查询部门管理数据
     *
     * @param dept 部门信息
     * @return 部门信息集合
     */
    @Override
    @DataScope(deptAlias = "d")
    public List<SysDept> selectDeptList(SysDept dept) {
        return deptMapper.selectDeptList(dept);
    }

    /**
     * 根据角色ID查询部门树信息
     *
     * @param roleId            角色ID
     * @param deptCheckStrictly 部门树选择项是否关联显示
     * @return 选中部门列表
     */
    @Override
    public List<Long> selectDeptListByRoleId(Long roleId, boolean deptCheckStrictly){
        return deptMapper.selectDeptListByRoleId(roleId, deptCheckStrictly);
    }

    /**
     * 根据部门ID查询信息
     *
     * @param deptId 部门ID
     * @return 部门信息
     */
    @Override
    public SysDept selectDeptById(Long deptId) {
        return deptMapper.selectDeptById(deptId);
    }

    /**
     * 根据ID查询所有子部门
     *
     * @param deptId 部门ID
     * @return 部门列表
     */
    @Override
    public List<SysDept> selectChildrenDeptById(Long deptId) {
        return deptMapper.selectChildrenDeptById(deptId);
    }

    /**
     * 根据ID查询所有子部门（正常状态）
     *
     * @param deptId 部门ID
     * @return 子部门数
     */
    @Override
    public int selectNormalChildrenDeptById(Long deptId) {
        return deptMapper.selectNormalChildrenDeptById(deptId);
    }

    /**
     * 是否存在子节点
     *
     * @param deptId 部门ID
     * @return 结果
     */
    @Override
    public int hasChildByDeptId(Long deptId) {
        return deptMapper.hasChildByDeptId(deptId);
    }

    /**
     * 查询部门是否存在用户
     *
     * @param deptId 部门ID
     * @return 结果
     */
    @Override
    public int checkDeptExistUser(Long deptId) {
        return deptMapper.checkDeptExistUser(deptId);
    }

    /**
     * 校验部门名称是否唯一
     *
     * @param deptName 部门名称
     * @param parentId 父部门ID
     * @return 结果
     */
    @Override
    public SysDept checkDeptNameUnique(String deptName, Long parentId) {
        return deptMapper.checkDeptNameUnique(deptName, parentId);
    }

    /**
     * 新增部门信息
     *
     * @param dept 部门信息
     * @return 结果
     */
    @Override
    public int insertDept(SysDept dept) {
        return deptMapper.insertDept(dept);
    }

    /**
     * 修改部门信息
     *
     * @param dept 部门信息
     * @return 结果
     */
    @Override
    public int updateDept(SysDept dept) {
        return deptMapper.updateDept(dept);
    }

    /**
     * 修改所在部门正常状态
     *
     * @param deptIds 部门ID组
     */
    @Override
    public void updateDeptStatusNormal(Long[] deptIds) {
        deptMapper.updateDeptStatusNormal(deptIds);
    }

    /**
     * 修改子元素关系
     *
     * @param depts 子元素
     * @return 结果
     */
    @Override
    public int updateDeptChildren(List<SysDept> depts) {
        return deptMapper.updateDeptChildren(depts);
    }

    /**
     * 删除部门管理信息
     *
     * @param deptId 部门ID
     * @return 结果
     */
    @Override
    public int deleteDeptById(Long deptId) {
        return deptMapper.deleteDeptById(deptId);
    }
}
